﻿// Write a program, which finds the maximal sequence of increasing elements in an array arr[n].
// It is not necessary the elements to be consecutively placed. E.g.: {9, 6, 2, 7, 4, 7, 6, 5, 8, 4}  {2, 4, 6, 8}



// Ще се опитам с рекурсия да я реша, искам при връщане от рекурсията, ако намери продължение (по-голям следващ елемент)
// да го замени в един масив, в който се запазва най-дългата. Има обаче уловка, ако текущата не е най-дългата!
// Трябва да доразуча вложените цикли чрез рекурсия.
using System;
using System.Collections.Generic;

public static class MaxIncreasingSequence
{
	static int Factorial(int n)
	{
		if (n == 0)
		{
			return 1;
		}
		else
		{
			return n * Factorial(n - 1);
		}
	
	}

	static void Main()
	{
		
		int member = int.Parse(Console.ReadLine());
		long result = Factorial(member);

		Console.WriteLine(result);

		//int[] arr = { 9, 6, 2, 7, 4, 7, 5, 6, 7, 8, 4 };
		//List<int> seq = new List<int>();
		//int currentBiggest = int.MinValue;

		//for (int i = 0; i < arr.Length; i++)
		//{
			
		//}



		/*
					

	using System;
	 
	class MaxIncreasingSequence
	{
		static void Main()
		{
			int[] arr = { 9, 6, 2, 7, 4, 7, 5, 6, 7, 8, 4 };
			int[] len = new int[arr.Length];
	 
			len[0] = 1;
			int index = 0; // В тази променлива ще запазим индекса на последния елемент на най-голямата последователност
			for (int x = 0; x < arr.Length; x++)
			{
				len[x] = 1;
				for (int i = 0; i < x; i++)
				{
					if (arr[i] < arr[x] && len[i] + 1 > len[x]) // Правим проверка за по малък елемент
					{
						len[x] = len[i] + 1;
					}
				}
				if (len[x] > len[index])
				{
					index = x;
				}
			}
	 
			Console.WriteLine("Longest sequence:"); // печатим редицата
	 
			int prevIndex = index;            // Започваме от индекса на най-големия елемент
			Console.Write(arr[index] + " ");  // Отпечатваме най-големия елемент
	 
			// Вървим назад по елементите и печатим по-малките
			for (; index >= 0; index--)
			{
				if (arr[index] < arr[prevIndex] && len[prevIndex] == len[index] + 1 )  // Проверяваме дали има по-малък елемент от последния намерен и дали дължните на последователностите съвпадат
				{
					Console.Write(arr[index] + " ");
					prevIndex = index;  // Записваме индекса на новия последен елемент
				}
			}
		   
		}
	}


		  */
	}
}